package CodeAdmin;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;

@SuppressWarnings("serial")
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Code implements Serializable {
	
	@PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
	
	private String code;
	private boolean statut;
	private Date duree;
	
	/**
     * Constructeur de la class Code
     * @param code
     */
    public Code(boolean statut) {
    	this.statut = statut;
    	code = setCodeAdmin(12);
    	key = KeyFactory.createKey(Code.class.getSimpleName(), code);
    	
    	Calendar jour = Calendar.getInstance();
		jour.add(Calendar.DAY_OF_MONTH, 7);
		duree = jour.getTime();
    }
	
	
    /**
     * @return la clé primaire d'un code dans la bd
     */
    public Key getKey() {
		return key;
	}
    
    
    /**
     * Enregistre le seul code celui du 1er superAdmin
     * @param code
     */
    public void setCode(String code) {
    	this.code = code;
    }
    
    
    /**
     * @return le code
     */
    public String getCode() {
    	return code;
    }
    
    
    /**
     * @return le statut
     */
    public boolean getStatut() {
    	return statut;
    }
    
    
    /**
     * @return le temps restant
     */
    public Date getDate() {
		return duree;
	}
    
    
    /**
     * @return vrai si la date est passée et faux sinon
     */
    public boolean estPassee() {
		Date jour = new Date();
		return (duree.compareTo(jour) < 0);
	}
    
    
    private static final String AN = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static Random rnd = new Random();

    
    /**
     * Crée une chaine de caractères aléatoire
     * @param nombre de caractères de la chaine
     * @return chaine de caractères
     */
    private String setCodeAdmin(int len) {
       StringBuilder sb = new StringBuilder(len);
       
       int i;
       for (i=0; i<len; i++) { 
          sb.append(AN.charAt(rnd.nextInt(AN.length())));
       }
       
       return sb.toString();
    }
}
